

/******************** 定义类 ***************************************************************/
/*
    管理员角色类
 */
function AdminRole() {
    this.id = null; // 唯一标识
    this.name = ""; // 名称
    this.permission = {}; // 权限
    this.is_super = false; // 是超级管理员
}

// 将对象序列化为一个json对象，可以用于http请求或对象复制
AdminRole.prototype.serialize = function() {
    return {
        id: this.id,
        name: this.name,
        permission: this.is_super ? "+100010" : permissionObject2Str(this.permission),
        is_super: this.is_super
    }
}

// 用json数据为对象属性赋值
AdminRole.prototype.parse = function(data) {
    this.id = data.id;
    this.name = data.name
    this.permission = data.permission == "+100010" ? {} : permissionStr2Object(data.permission);
    this.is_super = data.permission == "+100010";
}

// 暂时将属性存起来，做一次备份
AdminRole.prototype.storageValue = function() {
    this.storage = this.serialize();
}

// 用备份的数据覆盖现有数据
AdminRole.prototype.applyStorageValue = function() {
    if(this.storage) {
        this.parse(this.storage);
    }
}

function permissionStr2Object(str) {
    var result = {};
    var arr;
    arr = str.match(/\+\d+/g);
    if(arr) {
        for(var i = 0, len = arr.length; i < len; i++) {
            if(arr[i].length >= 5) {
                result[arr[i].substring(1)] = true;
            }
        }
    }
    arr = str.match(/\-\d+/g);
    if(arr) {
        for(var i = 0, len = arr.length; i < len; i++) {
            if(arr[i].length >= 5) {
                result[arr[i].substring(1)] = false;
            }
        }
    }
    return result;
}
function permissionObject2Str(obj) {
    var str = "";
    for(var key in obj) {
        str += (obj[key] ? "+" : "-") + key;
    }
    return str;
}

// ******************** 类静态属性与方法 **********************************************
// 解析json数据，返回一个对象
AdminRole.parse = function(data) {
    var o = new AdminRole();
    o.parse(data);
    return o;
}

// 解析json数组，返回对象数组
AdminRole.parseList = function(list) {
    var len = list.length;
    var arr = new Array(len);
    for(var i = 0; i < len; i++) {
        arr[i] = AdminRole.parse(list[i]);
    }
    return arr;
}

// ******************** 数据库存储方法 **********************************************
// AdminRole.prototype.save = function(callback) {
//     var that = this;
//     var action = this.mode == "add" ? "article_add" : "article_modify";
//     api.post(action, this.serialize(), function(res) {
//         that.id = res.id;
//         if(callback) callback();
//     });
// }



// ******************** 导出 **********************************************
export default AdminRole